#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <vector>
#include <unordered_map>
#include <unordered_set>

using namespace std;

#define NUM 1000

int main(int argc, const char** argv) {
    srand(time(NULL));
    vector<int> vec;

    for (int i = 0; i < NUM; i++) {
        vec.push_back(rand() % NUM);
    }

    // 查找第一个重复数据
    // unordered_set<int> set;
    // for (auto item : vec) {
    //     auto it = set.find(item);
    //     if (it != set.end()) {
    //         cout << "find first duplicate data: " << item << endl;
    //         break;
    //     }
    //     set.insert(item);
    // }

    // 查找所有重复元素
    // unordered_map<int, int> map;
    // for (auto item : vec) {
    //     auto it = map.find(item);
    //     if (it != map.end()) {
    //         it->second++;
    //     } else {
    //         map.insert(make_pair(item, 1));
    //     }
    // }

    // for (auto item : map) {
    //     if (item.second > 1) {
    //         cout << "find duplicate data: " << item.first 
    //             << "cnt : " << item.second << endl;
    //     }
    // }

    // 查找第一个未重复的字符串
    string str = "helloworldhesssaaqe";
    unordered_map<char, int> map;

    for (char ch : str) {
        map[ch]++;
    }

    for (char ch : str) {
        cout  << ch << " : " << map[ch] << endl;
        if (map[ch] == 1) {
            cout << "find first not duplicate char: " << ch << endl;
            return 0;
        }
    }
    
    cout << "not found the duplicate char" << endl;
    
    return 0;
}